FAT32目录项和FAT表
既然是想要了解目录首先就要知道他的根目录位置算法:算法如下↓
图中, 为DBR保留扇区数, 为每FAT扇区数,
DBR和保留扇区 |
FAT1 |
FAT2 |
根目录 |
DATA |
根据这张图我们就很清楚的知道了算法 *2+ 换成十进制就是1,054+7,665*2=16384
↑就是FAT32的根目录
FAT表位置也一清二楚 ↓
FAT表
我们先看一下FAT表
首先了解一下FAT32,因为是FAT 32所以顾名思义FAT表一项FAT为32Bit,也就是4字节。
并且如上图一样,第一个FAT项称为0号FAT项:第二个FAT项为1号FAT项......(从2号FAT项开始,2号FAT项表示第二簇,3号FAT项表示第三簇)
0项. 这一项其实没有什么意义,就像是一个标志,FAT表的开始。(一个固定值)
- .
这一项表示这记录脏标记,说明文件系统没有正常卸载或者有错误, 一般为FF FF FF FFH或FF FF FF 0FH (不知道具体是什么样的,这里就不详细写了)
这一项表示根目录,因为是第二项,所以根目录就在2簇,
从三项开始就是记入文件的位置了。
这里要举两个栗子:
栗一:当文件小于1簇时
就会在他的文件所在簇数对应的FAT项中写入FF FF FF 0FH 表示结束 比如这个草原色的第三项FAT表项这样就表示一簇结束。(也就是文件的最后一簇)
栗二:当文件大于1簇时,他就会变成这样
这里的第5项FAT表项出现的就不是FF FF FF 0FH了,而是 ,换成10进制就是6,他表示的是文件接下去一簇的位置是6簇,我们看看第6项FAT表项 就表示着文件下一簇为7簇。就这样,文件一共占到第52项FAT 老样子,他换成10进制就是53,我们看看53项FAT表项 出现了结束标识,这就表明文件在53簇结束了54簇就没有这个文件了
坏簇
有时候会出现这个标识,目前FAT表项为坏簇。
文件碎片
当出现第二项FAT表映射的并不是第3簇,(图中映射的是第5簇)则文件出现了碎片,(图中第2簇衔接第5簇)
注:图中的第二簇为目录表项,所以当目录表项中的目录超过1簇数量时,目录表项也会出现碎片
目录项
短文件名目录项
现在我们知道了文件在FAT表中的排列,但是FAT表的第哪一项属于文件的第1簇,则是要从目录项中了解到。
↑这是一条根目录项
1, 这一条是文件名,ASCLL码表示的,我这里创建的是一个名叫1234.txt的文件。
他的第一个字节可以表示文件是否被删除我先暂时删了这个文件,可以看到: 
2, 这里表示的是他的文件属性具体如下↓
01H←只读
02H←隐藏
04H←系统文件
08H←卷标
0FH←出现这个表示为长文件名目录项
00H←有时候会没有属性的情况出现
10H←目录
20H←存档
16H←这是什么呢?有兴趣就去研究一下。
3, 撇开中间红的蓝色的值表示为时间码,具体算法我不清楚,不过在WinHex中可以按Ctrl+F12打开模板栏,选择这个 来进行查看时间
4, 我们来看看这个红色的,他们表示的是文件的开始簇号 为高为字节, 为低位,组合起来就是34 12 78 56H(WinHex中字节颠倒进行换算)换算10进制为873625686则这个就是当前文件的开始簇号(这里为了演示方便就让他那么大了,基本上小的盘高位不会用上。)
5, 最后就是他的文件总字节数了,在当前目录项中如果表示为子目录(文件夹)则为00 00 00 00H
删除文件
删除前↓
删除后↓
1,可以看出,第一字节标上了E5标记
2,并且高位字节清零
长文件名目录项
接下来我放入一个文件↓
名字很长超出了文件名的11个字节的限制,我们来看看文件系统他是怎么解决的。
图中的所有没标颜色的内容就是长文件名目录项的内容了,但是淡蓝色的位置还是短文件目录项只不过他的文件名变成了 (因为有时候有些系统不支持长文件,所以就用这个来表示)
接下来我们看看长文件名目录项
- 长文件名目录占30字节(两行)这里一共用了3这个目录项
1,第一个 表示长文件名的顺序
01第一
02第二
43结束,并且是第三
当这里 出现4的时候表示结束
2,图中所有的绿色表示这文件名的Unicode编码顺序的话我的文件名123456789abcdefjhigklnmopqrstuvwxyz.txt按照这个找下规律就清楚了
3, 表示这文件属性
0FH←为长文件名目录
4, 长文件目录校验和
5其余均为文件名
删除后 全部标记为E5删除标记
|